今天我們來加深對樹的遞迴思想的理解。
題目連結: 101. Symmetric Tree
題目描述:給你一個二元樹的根節點 root,請檢查它是否對稱。
Input: root = [1,2,2,3,4,4,3]
Output: true
Input: root = [1,2,2,null,3,null,3]
Output: false
解題思路:
這個問題的核心思想和昨天的 Same Tree 非常相似,都是用遞迴來解決。但是,比較的對象發生了變化。
在 Same Tree 中,我們比較的是 p.left 和 q.left,p.right 和 q.right。
而在 Symmetric Tree 中,要判斷是否為鏡像,我們需要比較的是:
樹的左子樹 和 樹的右子樹 是否互為鏡像。
更進一步地,對於任意兩個要比較是否為鏡像的節點 node1 和 node2:
它們的值必須相等 (node1.val == node2.val)。
node1 的左子樹必須和 node2 的右子樹互為鏡像。
node1 的右子樹必須和 node2 的左子樹互為鏡像。
class Solution:
def ismirror(self, root1: Optional[TreeNode],root2: Optional[TreeNode]) -> bool:
if root1 == None or root2 == None:
if root1 == root2:
return True
else:
return False
return root1.val == root2.val and self.ismirror(root1.left,root2.right) and self.ismirror(root.right,root2.left)
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
return self.ismirror(root.left,root.right)
演算法分析:
isMirror(root.left, root.right)
。複雜度分析:
O(n)
(我們需要遍歷樹中的每一個節點一次,n 是樹的總節點數)。O(n)
。
O(log n)
。O(n)
。有問題可以底下留言!
下回見!!